/**
 * $version:  0.1 
 * $Date: 2011-01-21 
 *
 * Copyright (C) 2010-2011 Jawa Software. All rights reserved.
 *
 */
package org.jawa.util;

import java.util.Date;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.jawa.util.cache.CacheFactory;

/**
 * 应用启动的时候使用的监听器，用于设置系统启动后使用的一些参数。 以及进行部份初始化工作。
 * <p>
 * 1、设置log4j日志文件所在目录
 * </p>
 * <p>
 * 2、设置应用工作的主目录
 * </p>
 * 
 * @author Y-N
 * 
 */
public class StartupListener implements ServletContextListener {

	/**
	 * 应用初始化.
	 */
	public void contextInitialized(ServletContextEvent event) {
		System.out.println(StringUtils.center("系统正在初始化", 80, "*"));

		ServletContext context = event.getServletContext();
		String webPath = context.getRealPath("/");

		// 设置log4j日志文件所在目录
		System.setProperty("jawaHome", webPath);

		// 初始化系统环境
		initParameters(context);
		Log.info("参数初始化完成!");

		try {
			CacheFactory.initialize();
		} catch (Exception e) {
			e.printStackTrace();
			Log.info("缓存初始化出错!");
		}
		Log.info("缓存初始化完成!");
		
		System.out.println(StringUtils.center("系统初始化结束", 80, "*"));

	}

	/**
	 * 初始化系统环境
	 * 
	 * @param sc
	 */
	private void initParameters(ServletContext sc) {
		String homeDirectory = JawaGlobals.getXMLProperty("homeDirectory");
		// 设置系统工作主目录
		if (StringUtils.isEmpty(homeDirectory)) {
			homeDirectory = sc.getRealPath("/");
		}
		JawaGlobals.setHomeDirectory(homeDirectory);
		// 设置服务器启动时间
		JawaGlobals.setXMLProperty("lastStarted", DateFormatUtils.format(
				new Date(), JawaConstants.DATETIME_FORMAT));

	}

	/**
	 * 应用销毁时进行清理工作
	 */
	public void contextDestroyed(ServletContextEvent sce) {

	}
}
